package com.zjz.ProxyMethod;

/*
* 目的：生成一个代理对象，并执行被代理人方法
* 交互--被代理人方法，以及生成代理对象，提供一个调用代理人对象的方法
* 1.被代理人的方法的获取，必须要获取到被代理人的对象
* 2.生成代理对象，必须要依托于代理人的方法（接口）以及它的加载器（要不jvm处理不了）
*
* */


import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyInvocationHandler implements InvocationHandler {

    private Object target; // 被代理的人-对象

    public void setTarget(Object target) {
        this.target = target;
    }


    // 调用代理人对象的方法，以及生成代理对象
    public Object getProxy(){

        Object proxyInstance = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
        return proxyInstance;
    }

    // 被代理人方法
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("执行"+method.getName()+"方法---");
        Object result = method.invoke(target, args); // 此时执行被代理人的方法

        return result;
    }
}
